import { defineStore } from 'pinia';
import { getUserList, addUser, enableUser, disableUser, queryUsers, editUser, deleteUser, getRoles } from '@/api/user';
import { ElMessage } from 'element-plus';

export const useUserStore = defineStore('userStore', {
  state: () => ({
    users: [],
    total: 0,
    page: 1,
    pageSize: 10,
    query: '', // 用于模糊查询的电话号码
    loading: false, // 添加加载状态
    currentUser: null, // 当前操作的用户
    rolesList: []
  }),
  getters: {
    // 计算总页数
    totalPages() {
      return Math.ceil(this.total / this.pageSize);
    },
    // 检查是否有上一页
    hasPrevPage() {
      return this.page > 1;
    },
    // 检查是否有下一页
    hasNextPage() {
      return this.page < this.totalPages;
    },
  },
  actions: {
    // 设置当前页码
    setPage(page) {
      if (page >= 1 && page <= this.totalPages) {
        this.page = page;
        this.fetchUsers();
      }
    },
    // 设置每页条数
    setPageSize(pageSize) {
      this.pageSize = pageSize;
      this.page = 1; // 重置到第一页
      this.fetchUsers();
    },
    // 分页获取用户列表
    async fetchUsers() {
      this.loading = true;
      try {
        const response = await getUserList({
          pageIndex: this.page,
          pageSize: this.pageSize,
        });
        // 响应处理
        // 适配后端返回格式
        if (response && response.code === 200 && response.data) {
          this.users = response.data.items || [];
          this.total = response.data.totalCount || 0;
        } else {
          this.users = [];
          this.total = 0;
          ElMessage.error('获取用户列表失败: 无效的响应格式');
        }
      } catch (error) {
        if (error.code === 403) {
          ElMessage.error('无该权限');
        } else {
          ElMessage.error('获取用户列表失败: ' + (error.message || '未知错误'));
        }
        // console.error('Failed to fetch users list:', error);
      } finally {
        this.loading = false;
      }
    },
    // 添加获取角色列表的方法
    async fetchRoles() {
      this.loading = true;
      try {
        // console.log('开始获取角色数据...');
        const response = await getRoles();
        // console.log('角色数据响应:', response);
        if (response && response.code === 200) {
          this.rolesList = response.data || [];
          // console.log('成功获取角色数据:', this.rolesList);
        } else {
          this.rolesList = [];
          ElMessage.error('获取角色列表失败: ' + (response?.message || '响应格式错误'));
        }
      } catch (error) {
        ElMessage.error('获取角色列表失败: ' + (error.message || '未知错误'));
        // console.error(error);
      } finally {
        this.loading = false;
      }
    },

    // 修改初始化方法，同时获取用户和角色
    async initData() {
      // 并行执行两个异步操作
      await Promise.all([
        this.fetchUsers(),
        this.fetchRoles()
      ]);
    },
    // 模糊查询用户列表
    async searchUsers(searchParams) {
      this.query = searchParams
      this.loading = true
      try {
        const response = await queryUsers({
          ...searchParams,
          pageIndex: this.page,
          pageSize: this.pageSize
        })
        // 响应处理
        // 适配后端返回格式
        if (response && response.code === 200 && response.data) {
          this.users = response.data.items || []
          this.total = response.data.totalCount || 0
        } else {
          this.users = []
          this.total = 0
          ElMessage.error('查询用户失败: 无效的响应格式')
        }
      } catch (error) {
        ElMessage.error('查询用户失败: ' + (error.message || '未知错误'))
        // console.error('Failed to search users:', error)
      } finally {
        this.loading = false
      }
    },
    // 启用用户
    async enableUser(userId) {
      this.loading = true;
      try {
        const response = await enableUser(userId);
        if (response && response.code === 200) {
          ElMessage.success(response.data);
          this.fetchUsers(); // 刷新用户列表
        } else {
          ElMessage.error('启用用户失败: ' + (response?.message || '未知错误'));
        }
      } catch (error) {
        if (error.code === 403) {
          ElMessage.error('无该权限');
        } else {
          ElMessage.error('启用用户失败: ' + (error.message || '未知错误'));
        }
        console.error('Failed to enable user:', error);
      } finally {
        this.loading = false;
      }
    },
    // 禁用用户
    async disableUser(userId) {
      this.loading = true;
      try {
        const response = await disableUser(userId);
        if (response && response.code === 200) {
          ElMessage.success(response.data);
          this.fetchUsers(); // 刷新用户列表
        } else {
          ElMessage.error(response.message);
        }
      } catch (error) {
        if (error.code === 403) {
          ElMessage.error('无该权限');
        } else {
          ElMessage.error('禁用用户失败: ' + (error.message || '未知错误'));
        }
        console.error('Failed to disable user:', error);
      } finally {
        this.loading = false;
      }
    },
    // 新增用户
    async addUser(userData) {
      this.loading = true;
      try {
        // 检查token
        const token = localStorage.getItem('token');

        if (!token) {
          ElMessage.error('请先登录');
          return false;
        }

        const response = await addUser(userData);

        if (response && response.code === 200) {
          ElMessage.success('用户添加成功');
          this.fetchUsers(); // 刷新用户列表
          return true; // 返回成功状态
        } else {
          ElMessage.error('添加用户失败: ' + (response.message || '未知错误'));
          return false;
        }
      } catch (error) {
        if (error.code === 403) {
          ElMessage.error('无该权限');
        } else {
          ElMessage.error('添加用户失败: ' + (error.message || '未知错误'));
        }
        console.error('Failed to add user:', error);
        return false; // 返回失败状态
      } finally {
        this.loading = false;
      }
    },
    // 编辑用户
    async editUser(userId, userData) {
      this.loading = true;
      try {
        const response = await editUser(userId, userData);
        if (response && response.code === 200) {
          // 处理响应

          ElMessage.success('用户更新成功');
          this.fetchUsers(); // 刷新用户列表
          return true; // 返回成功状态
        } else {
          // 处理错误信息

          ElMessage.error('更新用户失败: ' + (response.message || '未知错误'));
          return false;
        }
      } catch (error) {
        if (error.code === 403) {
          ElMessage.error('无该权限');
        } else {
          ElMessage.error('更新用户失败: ' + (error.message || '未知错误'));
        }
        console.error('Failed to edit user:', error);
        return false; // 返回失败状态
      } finally {
        this.loading = false;
      }
    },
    // 删除用户
    async deleteUser(userId) {
      this.loading = true;
      try {
        const response = await deleteUser(userId);
        if (response && response.code === 200) {
          ElMessage.success('用户删除成功');
          this.fetchUsers(); // 刷新用户列表
          return true; // 返回成功状态
        } else {
          ElMessage.error('删除用户失败: ' + (response.message || '未知错误'));
          return false;
        }
      } catch (error) {
        if (error.code === 403) {
          ElMessage.error('无该权限');
        } else {
          ElMessage.error('删除用户失败: ' + (error.message || '未知错误'));
        }
        console.error('Failed to delete user:', error);
        return false; // 返回失败状态
      } finally {
        this.loading = false;
      }
    },
    // 重置查询条件
    resetSearch() {
      this.query = '';
      this.page = 1;
      this.fetchUsers();
    },
  },
});
